package com.hxx.day9;


public class TestDemo4 {
    /**
     * 它与sleep()类似，只是不能由用户指定暂停多长时间，并且yield()方法只能让【同优先级】的线程有执行的机会
     */
    /*public static void main(String[] args) {
        Runnable runnable = ()-> {
            for (int index = 0; index < 5; index++) {
                //阻塞
               Thread.yield();
                System.out.println(Thread.currentThread().getName()+"------>>"+index);
            }
        };
        Thread t = new Thread(runnable);
        t.start();// 启动线程
    }*/
    /**
     * 前线程可以调用另一个线程的join方法，调用后当前线程会被阻塞不再执行，直到被调用的线程执行完毕，当前线程才会执行
     */
   /* public static void main(String[] args) {
        Runnable runnable = () -> System.out.println("--------->>>join");
        Thread t = new Thread(runnable);
        t.start();// 启动线程
        try {
            t.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("--------->>>main");
    }*/
    /**
     * 如果我们的线程正在睡眠，可以采用interrupt进行中断
     */
    public static void main(String[] args) {
        Runnable r1 = new Processor();
        Thread t1 = new Thread(r1, "t1");
        t1.start();

        try {
            //设置为500毫秒，没有出现中断异常，因为
            //500毫秒之后再次调用t1.interrupt()时，
            //此时的睡眠线程已经执行完成
            //如果sleep的时间设置的小一些，会出现中断异常，
            //因为存在睡眠线程
            Thread.sleep(500);
        }catch(Exception e) {
            e.printStackTrace();
        }
        //中断睡眠中的线程
        t1.interrupt();
    }
}
class Processor implements Runnable {
    public void run() {
        for (int i=1; i<1000; i++) {
            System.out.println(Thread.currentThread().getName() + "," + i);
            if (i % 50 == 0) {
                try {
                    Thread.sleep(200);
                }catch(Exception e) {
                    System.out.println("-------中断-------");
                    break;
                }
            }
        }
    }
}

























